home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / CodeFragments.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  8.8 KB  |  290 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        CodeFragments.mod
  3.  
  4.      Contains:    Code Fragment Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$IF UNDEFINED OLDROUTINENAMES*)
  21. (*$SET OLDROUTINENAMES FALSE*)
  22. (*$END*)
  23. (*$TAGS-*)
  24. (*$CALLING PASCAL*)
  25. MODULE CodeFragments;
  26.  
  27. IMPORT SYSTEM, Types, Files;
  28.  
  29. (* $PUSH*)
  30. (* $ALIGN MAC68K*)
  31. (* $LibExport+*)
  32.  
  33. CONST
  34.     kCFragResourceType*            = LONG("cfrg");
  35.     kCFragResourceID*            = 0;
  36.     kCFragLibraryFileType*        = LONG("shlb");
  37.  
  38.     
  39. TYPE
  40.     CFragArchitecture* = Types.OSType;
  41.  
  42.  
  43. CONST
  44.     kPowerPCCFragArch*            = LONG("pwpc");
  45.     kMotorola68KCFragArch*        = LONG("m68k");
  46.     kAnyCFragArch*                = $3F3F3F3F;
  47.  
  48. (*$IF GENERATINGPOWERPC *)
  49.     kCurrentCFragArch*            = kPowerPCCFragArch;
  50.  
  51. (*$END*)
  52. (*$IF GENERATING68K *)
  53.     kCurrentCFragArch*            = kMotorola68KCFragArch;
  54.  
  55. (*$END*)
  56.     
  57. TYPE
  58.     CFragConnectionID* = Types.UInt32;
  59.  
  60.     CFragClosureID* = Types.UInt32;
  61.  
  62.     CFragContextID* = Types.UInt32;
  63.  
  64.     CFragContainerID* = Types.UInt32;
  65.  
  66.     
  67. TYPE
  68.     CFragLoadOptions* = Types.UInt32;
  69.  
  70.  
  71. CONST
  72.     kLoadCFrag*                    = $01;                            (* Try to use existing copy, load if not found.*)
  73.     kFindCFrag*                    = $02;                            (* Try find an existing copy, don't load if not found.*)
  74.     kNewCFragCopy*                = $05;                            (* Load a new copy whether one already exists or not.*)
  75.     kInplaceCFrag*                = $80;                            (* Use data sections directly in the container.*)
  76.  
  77.     kUnresolvedCFragSymbolAddress* = 0;
  78.  
  79.     
  80. TYPE
  81.     CFragSymbolClass* = Types.UInt8;
  82.  
  83.  
  84. CONST
  85.     kCodeCFragSymbol*            = 0;
  86.     kDataCFragSymbol*            = 1;
  87.     kTVectorCFragSymbol*            = 2;
  88.     kTOCCFragSymbol*                = 3;
  89.     kGlueCFragSymbol*            = 4;
  90.  
  91.     
  92. TYPE
  93.     CFragUsage* = Types.UInt8;
  94.  
  95.  
  96. CONST
  97.     kImportLibraryCFrag*            = 0;                            (* Standard CFM import library.*)
  98.     kApplicationCFrag*            = 1;                            (* Macintosh application.*)
  99.     kDropInAdditionCFrag*        = 2;                            (* Private extension to an application or library.*)
  100.  
  101.     kIsCompleteCFrag*            = 0;                            (* A "base" fragment, not an update.*)
  102.     kFirstCFragUpdate*            = 1;                            (* The first update, others are numbered 2, 3, ...*)
  103.  
  104.     
  105. TYPE
  106.     CFragLocatorKind* = Types.UInt8;
  107.  
  108.  
  109. CONST
  110.     kMemoryCFragLocator*            = 0;                            (* Container is already addressable.*)
  111.     kDataForkCFragLocator*        = 1;                            (* Container is in a file's data fork.*)
  112.     kResourceCFragLocator*        = 2;                            (* Container is in a file's resource fork.*)
  113.     kByteStreamCFragLocator*        = 3;                            (* Container is in a given file fork as a byte stream.*)
  114.  
  115.     kCFragGoesToEOF*                = 0;
  116.  
  117.  
  118. TYPE
  119.     CFragOldMemoryLocator* = (*ΔΔPACKEDΔΔ*) RECORD
  120.         address*:                Types.LogicalAddress;
  121.         length*:                    Types.UInt32;
  122.         inPlace*:                BOOLEAN;
  123.         reserved3a*:                ARRAY 3 (*ΔΔ[0..2]ΔΔ*) OF Types.UInt8;                    (* ! Do not use this!*)
  124.     END;
  125.  
  126.     CFragHFSDiskFlatLocator* = RECORD
  127.         fileSpec*:                Files.FSSpecPtr;
  128.         offset*:                    Types.UInt32;
  129.         length*:                    Types.UInt32;
  130.     END;
  131.  
  132. (* ! This must have a file specification at the same offset as a data fork locator!*)
  133.     CFragHFSSegmentedLocator* = (*ΔΔPACKEDΔΔ*) RECORD
  134.         fileSpec*:                Files.FSSpecPtr;
  135.         rsrcType*:                Types.OSType;
  136.         rsrcID*:                    Types.SInt16;
  137.         reserved2a*:                Types.UInt16;                                    (* ! Do not use this!*)
  138.     END;
  139.  
  140.     CFragHFSLocator* = RECORD
  141.         where*:                    Types.SInt32;                                    (* Really of type CFragLocatorKind.*)
  142.         (*ΔΔ CASE INTEGER OF
  143.         0: ( *)
  144.     END;
  145.     CFragDiskLocator* = RECORD(CFragHFSLocator)
  146.             onDisk*:                        CFragHFSDiskFlatLocator;            (* First so debugger shows this form.*)
  147.            (*ΔΔ );
  148.         1: ( *)
  149.     END;
  150.     CFragMemoryLocator* = RECORD(CFragHFSLocator)
  151.             inMem*:                        CFragOldMemoryLocator;
  152.            (*ΔΔ );
  153.         2: ( *)
  154.     END;
  155.     CFragSegmentedLocator* = RECORD(CFragHFSLocator)
  156.             inSegs*:                        CFragHFSSegmentedLocator;
  157.            (*ΔΔ );*)
  158.     END;
  159.  
  160.     CFragHFSLocatorPtr* = POINTER TO CFragHFSLocator;
  161.  
  162. (* -------------------------------------------------------------------------------------------*)
  163. (* The parameter block passed to fragment initialization functions.  The locator and name*)
  164. (* pointers are valid only for the duration of the initialization routine.  I.e. if you want*)
  165. (* to save the locator or name, save the contents, not the pointers.  Initialization routines*)
  166. (* take one parameter, a pointer to the parameter block, and return a success/failure result.*)
  167. (* ! Note that the initialization function returns an Types.OSErr.  Any result other than noErr will*)
  168. (* ! cause the entire load to be aborted at that point.*)
  169.     CFragInitBlock* = RECORD
  170.         contextID*:                CFragContextID;
  171.         closureID*:                CFragClosureID;
  172.         connectionID*:            CFragConnectionID;
  173.         fragLocator*:            CFragHFSLocator;
  174.         libName*:                Types.StringPtr;
  175.         reserved4a*:                Types.UInt32;                                    (* ! Do not use this!*)
  176.         reserved4b*:                Types.UInt32;                                    (* ! Do not use this!*)
  177.         reserved4c*:                Types.UInt32;                                    (* ! Do not use this!*)
  178.         reserved4d*:                Types.UInt32;                                    (* ! Do not use this!*)
  179.     END;
  180.  
  181.     CFragInitBlockPtr* = POINTER TO CFragInitBlock;
  182.  
  183.     CFragInitFunction* = (*ΔΔ Types.ProcPtr;*) PROCEDURE ((*CONST*)VAR theInitBlock: CFragInitBlock): Types.OSErr;
  184.  
  185.     CFragTermRoutine* = (*ΔΔ Types.ProcPtr;*) PROCEDURE ;
  186.  
  187.     CFragInitFunctionPtr* = SYSTEM.PTR (*ΔΔ POINTER TO CFragInitFunction*);
  188.  
  189.     CFragTermRoutinePtr* = SYSTEM.PTR (*ΔΔ POINTER TO CFragTermRoutine*);
  190.  
  191. (* §*)
  192. (* ===========================================================================================*)
  193. (* Routines*)
  194. (* ========*)
  195.  
  196. PROCEDURE GetSharedLibrary*(libName: Types.ConstStr63Param; archType: Types.OSType; loadFlags: CFragLoadOptions; VAR connID: CFragConnectionID; VAR mainAddr: Types.Ptr; VAR errMessage: Types.Str255): Types.OSErr;
  197.     (*$IF NOT GENERATINGCFM*)
  198.     INLINE PASCAL $3F3C, $0001, $AA5A;
  199.     (*$END*)
  200. PROCEDURE GetDiskFragment*((*CONST*)VAR fileSpec: Files.FSSpec; offset: Types.UInt32; length: Types.UInt32; fragName: Types.ConstStr63Param; loadFlags: CFragLoadOptions; VAR connID: CFragConnectionID; VAR mainAddr: Types.Ptr; VAR errMessage: Types.Str255): Types.OSErr;
  201.     (*$IF NOT GENERATINGCFM*)
  202.     INLINE PASCAL $3F3C, $0002, $AA5A;
  203.     (*$END*)
  204. PROCEDURE GetMemFragment*(memAddr: (*ΔΔUNIVΔΔ*) Types.Ptr; length: Types.UInt32; fragName: Types.ConstStr63Param; loadFlags: CFragLoadOptions; VAR connID: CFragConnectionID; VAR mainAddr: Types.Ptr; VAR errMessage: Types.Str255): Types.OSErr;
  205.     (*$IF NOT GENERATINGCFM*)
  206.     INLINE PASCAL $3F3C, $0003, $AA5A;
  207.     (*$END*)
  208. PROCEDURE CloseConnection*(VAR connID: CFragConnectionID): Types.OSErr;
  209.     (*$IF NOT GENERATINGCFM*)
  210.     INLINE PASCAL $3F3C, $0004, $AA5A;
  211.     (*$END*)
  212. PROCEDURE FindSymbol*(connID: CFragConnectionID; symName: Types.ConstStr255Param; VAR symAddr: Types.Ptr; VAR symClass: CFragSymbolClass): Types.OSErr;
  213.     (*$IF NOT GENERATINGCFM*)
  214.     INLINE PASCAL $3F3C, $0005, $AA5A;
  215.     (*$END*)
  216. PROCEDURE CountSymbols*(connID: CFragConnectionID; VAR symCount: LONGINT): Types.OSErr;
  217.     (*$IF NOT GENERATINGCFM*)
  218.     INLINE PASCAL $3F3C, $0006, $AA5A;
  219.     (*$END*)
  220. PROCEDURE GetIndSymbol*(connID: CFragConnectionID; symIndex: LONGINT; VAR symName: Types.Str255; VAR symAddr: Types.Ptr; VAR symClass: CFragSymbolClass): Types.OSErr;
  221.     (*$IF NOT GENERATINGCFM*)
  222.     INLINE PASCAL $3F3C, $0007, $AA5A;
  223.     (*$END*)
  224. (*$IF OLDROUTINENAMES *)
  225.     
  226. TYPE
  227.     ConnectionID* = CFragConnectionID;
  228.  
  229.     LoadFlags* = CFragLoadOptions;
  230.  
  231.     SymClass* = CFragSymbolClass;
  232.  
  233.     MemFragment* = CFragOldMemoryLocator;
  234.  
  235.     DiskFragment* = CFragHFSDiskFlatLocator;
  236.  
  237.     SegmentedFragment* = CFragHFSSegmentedLocator;
  238.  
  239.     FragmentLocator* = CFragHFSLocator;
  240.  
  241.     FragmentLocatorPtr* = CFragHFSLocatorPtr;
  242.  
  243.     InitBlock* = CFragInitBlock;
  244.  
  245.     InitBlockPtr* = CFragInitBlockPtr;
  246.  
  247.     ConnectionInitializationRoutine* = CFragInitFunction;
  248.  
  249.     ConnectionTerminationRoutine* = CFragTermRoutine;
  250.  
  251.  
  252. CONST
  253.     kPowerPCArch*                = kPowerPCCFragArch;
  254.     kMotorola68KArch*            = kMotorola68KCFragArch;
  255.     kAnyArchType*                = kAnyCFragArch;
  256.     kNoLibName*                    = 0;
  257.     kNoConnectionID*                = 0;
  258.     kLoadLib*                    = kLoadCFrag;
  259.     kFindLib*                    = kFindCFrag;
  260.     kLoadNewCopy*                = kNewCFragCopy;
  261.     kUseInPlace*                    = kInplaceCFrag;
  262.     kCodeSym*                    = kCodeCFragSymbol;
  263.     kDataSym*                    = kDataCFragSymbol;
  264.     kTVectSym*                    = kTVectorCFragSymbol;
  265.     kTOCSym*                        = kTOCCFragSymbol;
  266.     kGlueSym*                    = kGlueCFragSymbol;
  267.     kInMem*                        = kMemoryCFragLocator;
  268.     kOnDiskFlat*                    = kDataForkCFragLocator;
  269.     kOnDiskSegmented*            = kResourceCFragLocator;
  270.     kIsLib*                        = kImportLibraryCFrag;
  271.     kIsApp*                        = kApplicationCFrag;
  272.     kIsDropIn*                    = kDropInAdditionCFrag;
  273.     kFullLib*                    = kIsCompleteCFrag;
  274.     kUpdateLib*                    = kFirstCFragUpdate;
  275.     kWholeFork*                    = kCFragGoesToEOF;
  276.     kCFMRsrcType*                = kCFragResourceType;
  277.     kCFMRsrcID*                    = kCFragResourceID;
  278.     kSHLBFileType*                = kCFragLibraryFileType;
  279.     kUnresolvedSymbolAddress*    = kUnresolvedCFragSymbolAddress;
  280.  
  281.     kPowerPC*                    = kPowerPCCFragArch;
  282.     kMotorola68K*                = kMotorola68KCFragArch;
  283.  
  284. (*$END*)
  285.  
  286. (* $ALIGN RESET*)
  287. (* $POP*)
  288.  
  289.  END CodeFragments.
  290.